package cn.iocoder.yudao.module.brokerage.record.service;

import cn.iocoder.yudao.module.api.member.agency.vo.AgencyOrderVO;
import cn.iocoder.yudao.module.api.member.vip.vo.VipOrderVO;
import cn.iocoder.yudao.module.api.trade.order.dto.TradeOrderItemRespDTO;
import cn.iocoder.yudao.module.api.trade.order.dto.TradeOrderRespDTO;
import cn.iocoder.yudao.module.api.trade.scan.dto.ScanOrderDTO;
import cn.iocoder.yudao.module.brokerage.record.pojo.po.BrokerageRecordDO;

/**
 * 佣金记录 Service 接口
 *
 * @author owen
 */
public interface BrokerageRecordService {

    /**
     * 订单支付成功，佣金分佣
     *
     * @param order 订单信息
     */
    void addBrokerageWhenOrderPaid(TradeOrderRespDTO order);

    /**
     * 订单支付成功，佣金分佣
     *
     * @param order 订单信息
     */
    void addBrokerageWhenOrderPaid(ScanOrderDTO order);

    /**
     * 订单支付成功，佣金分佣
     *
     * @param order 订单信息
     */
    void addBrokerageWhenOrderPaid(VipOrderVO order);

    /**
     * 订单支付成功，佣金分佣
     *
     * @param order 订单信息
     */
    void addBrokerageWhenOrderPaid(AgencyOrderVO order);

    /**
     * 取消佣金：将佣金记录，状态修改为已失效
     *
     * @param order 订单信息
     * @param orderItem 订单项信息
     */
    void cancelBrokerage(TradeOrderRespDTO order, TradeOrderItemRespDTO orderItem);

    /**
     * 解冻佣金：将待解冻的佣金记录，状态修改为已结算
     *
     * @return 解冻佣金的数量
     */
    int unfreezeUserRecord();

    /**
     * 解冻单条佣金记录
     *
     * @return 解冻是否成功
     */
    boolean unfreezeUserRecord(BrokerageRecordDO record);

}
